{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Protein Structural Change Prediction Example\n",
    "In this notebook, we use Graphein to preprocess the PSCDB database into graphs. We then perform graph classification on the unbound protein ligand graphs to predict the class of structural rearrangement the protein undergoes upon ligand binding."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [],
   "source": [
    "import dgl\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import torch\n",
    "from tqdm import tqdm\n",
    "from dgllife.model.model_zoo import GCNPredictor\n",
    "from graphein.construct_graphs import ProteinGraph\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import f1_score, precision_score, recall_score\n",
    "from torch.nn import CrossEntropyLoss\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "device = 'cpu'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data\n",
    "1.  We load the dataset. The script for parsing the datafrom a webserver to the `structural_rearrangement_data.csv` file is available in `process_data.ipynb` and `make_rearrangement_data.py` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>level_0</th>\n",
       "      <th>index</th>\n",
       "      <th>PSCID</th>\n",
       "      <th>Protein Name</th>\n",
       "      <th>Free form</th>\n",
       "      <th>Bound form</th>\n",
       "      <th>Ligands</th>\n",
       "      <th>Classification(?)</th>\n",
       "      <th>motion_type</th>\n",
       "      <th>Free PDB</th>\n",
       "      <th>Free Chains</th>\n",
       "      <th>Bound PDB</th>\n",
       "      <th>Bound Chains</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>CD.1</td>\n",
       "      <td>HYPOTHETICAL OXIDOREDUCTASE YIAK</td>\n",
       "      <td>1nxu_AB</td>\n",
       "      <td>1s20_AB</td>\n",
       "      <td>2xNAD,2xTLA</td>\n",
       "      <td>200004</td>\n",
       "      <td>coupled_domain_motion</td>\n",
       "      <td>1nxu</td>\n",
       "      <td>AB</td>\n",
       "      <td>1s20</td>\n",
       "      <td>AB</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>CD.2</td>\n",
       "      <td>ADENYLATE KINASE</td>\n",
       "      <td>4ake_A</td>\n",
       "      <td>2eck_A</td>\n",
       "      <td>ADP,AMP</td>\n",
       "      <td>200003</td>\n",
       "      <td>coupled_domain_motion</td>\n",
       "      <td>4ake</td>\n",
       "      <td>A</td>\n",
       "      <td>2eck</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>CD.3</td>\n",
       "      <td>GLUCOKINASE</td>\n",
       "      <td>1q18_AB</td>\n",
       "      <td>1sz2_AB</td>\n",
       "      <td>2xBGC</td>\n",
       "      <td>200003</td>\n",
       "      <td>coupled_domain_motion</td>\n",
       "      <td>1q18</td>\n",
       "      <td>AB</td>\n",
       "      <td>1sz2</td>\n",
       "      <td>AB</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>CD.4</td>\n",
       "      <td>LACTOFERRIN</td>\n",
       "      <td>1lfh_A</td>\n",
       "      <td>1lfi_A</td>\n",
       "      <td>2xCU,2xNAG</td>\n",
       "      <td>110103</td>\n",
       "      <td>coupled_domain_motion</td>\n",
       "      <td>1lfh</td>\n",
       "      <td>A</td>\n",
       "      <td>1lfi</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>CD.5</td>\n",
       "      <td>ELONGATION FACTOR 2</td>\n",
       "      <td>1n0v_D</td>\n",
       "      <td>1n0u_A</td>\n",
       "      <td>SO1</td>\n",
       "      <td>110002</td>\n",
       "      <td>coupled_domain_motion</td>\n",
       "      <td>1n0v</td>\n",
       "      <td>D</td>\n",
       "      <td>1n0u</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  level_0  index PSCID                      Protein Name  \\\n",
       "0           0        0      0  CD.1  HYPOTHETICAL OXIDOREDUCTASE YIAK   \n",
       "1           1        1      1  CD.2                  ADENYLATE KINASE   \n",
       "2           2        2      2  CD.3                       GLUCOKINASE   \n",
       "3           3        3      3  CD.4                       LACTOFERRIN   \n",
       "4           4        4      4  CD.5               ELONGATION FACTOR 2   \n",
       "\n",
       "  Free form Bound form      Ligands  Classification(?)            motion_type  \\\n",
       "0   1nxu_AB    1s20_AB  2xNAD,2xTLA             200004  coupled_domain_motion   \n",
       "1    4ake_A     2eck_A      ADP,AMP             200003  coupled_domain_motion   \n",
       "2   1q18_AB    1sz2_AB        2xBGC             200003  coupled_domain_motion   \n",
       "3    1lfh_A     1lfi_A   2xCU,2xNAG             110103  coupled_domain_motion   \n",
       "4    1n0v_D     1n0u_A          SO1             110002  coupled_domain_motion   \n",
       "\n",
       "  Free PDB Free Chains Bound PDB Bound Chains  \n",
       "0     1nxu          AB      1s20           AB  \n",
       "1     4ake           A      2eck            A  \n",
       "2     1q18          AB      1sz2           AB  \n",
       "3     1lfh           A      1lfi            A  \n",
       "4     1n0v           D      1n0u            A  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load data sets\n",
    "df = pd.read_csv('structural_rearrangement_data.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. We create one-hot encodings of the labels, indicating the rearrangement motion class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 1., 0., 0., 0., 0., 0.])"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create labels\n",
    "labels = pd.get_dummies(df.motion_type).values.tolist()\n",
    "labels = [torch.Tensor(i) for i in labels]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. We split the data into training and testing data, and construct the Graphs using Graphein. \n",
    "\n",
    "Graphein will automatically download the relevant `.PDB` files from the PDB and compute the intramolecular contacts using `GetContacts` if the files are not found in the `pdb_dir` and `contacts_dir` directories.\n",
    "\n",
    "We select the relevant chains in structure from the PDB from the `Free Chains` column in the dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  0%|          | 0/134 [00:00<?, ?it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      "  1%|          | 1/134 [00:00<00:14,  8.88it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 16 HETATOM nodes\n",
      "Detected 93 total nodes\n",
      "Contact file found: ['../../examples/contacts/2bl7_contacts.tsv']\n",
      "Calculated 234 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=93, num_edges=234,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 1 HETATOM nodes\n",
      "Detected 445 total nodes\n",
      "Contact file found: ['../../examples/contacts/2fs5_contacts.tsv']\n",
      "Calculated 1217 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  1%|▏         | 2/134 [00:00<00:17,  7.42it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      "  2%|▏         | 3/134 [00:00<00:19,  6.86it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=445, num_edges=1217,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 1 HETATOM nodes\n",
      "Detected 362 total nodes\n",
      "Contact file found: ['../../examples/contacts/1so7_contacts.tsv']\n",
      "Calculated 895 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=362, num_edges=895,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  3%|▎         | 4/134 [00:00<00:22,  5.67it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 10 HETATOM nodes\n",
      "Detected 889 total nodes\n",
      "Contact file found: ['../../examples/contacts/2c00_contacts.tsv']\n",
      "Calculated 1181 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=445, num_edges=1181,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  4%|▎         | 5/134 [00:00<00:26,  4.85it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 25 HETATOM nodes\n",
      "Detected 808 total nodes\n",
      "Contact file found: ['../../examples/contacts/1usl_contacts.tsv']\n",
      "Calculated 958 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=322, num_edges=958,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  4%|▍         | 6/134 [00:01<00:24,  5.17it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 11 HETATOM nodes\n",
      "Detected 381 total nodes\n",
      "Contact file found: ['../../examples/contacts/2dcz_contacts.tsv']\n",
      "Calculated 459 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=185, num_edges=459,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 53 HETATOM nodes\n",
      "Detected 220 total nodes\n",
      "Contact file found: ['../../examples/contacts/2znd_contacts.tsv']\n",
      "Calculated 485 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  5%|▌         | 7/134 [00:01<00:21,  5.82it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=440, num_edges=485,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 269 HETATOM nodes\n",
      "Detected 1572 total nodes\n",
      "Contact file found: ['../../examples/contacts/3c8n_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  6%|▌         | 8/134 [00:01<00:29,  4.32it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 2122 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=798, num_edges=2122,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1ll3'...\n",
      "Downloaded PDB file for: 1ll3\n",
      "Detected 12 HETATOM nodes\n",
      "Detected 273 total nodes\n",
      "1ll3\n",
      "['../../examples/pdbs/1ll3.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1ll3.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  7%|▋         | 9/134 [00:04<01:53,  1.11it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1ll3\n",
      "Calculated 736 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=546, num_edges=736,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  7%|▋         | 10/134 [00:04<01:30,  1.37it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 5 HETATOM nodes\n",
      "Detected 959 total nodes\n",
      "Contact file found: ['../../examples/contacts/2iw2_contacts.tsv']\n",
      "Calculated 2904 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=959, num_edges=2904,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  8%|▊         | 11/134 [00:04<01:10,  1.76it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 482 total nodes\n",
      "Contact file found: ['../../examples/contacts/1smn_contacts.tsv']\n",
      "Calculated 1281 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=482, num_edges=1281,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 5 HETATOM nodes\n",
      "Detected 246 total nodes\n",
      "Contact file found: ['../../examples/contacts/1ywf_contacts.tsv']\n",
      "Calculated 722 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "  9%|▉         | 12/134 [00:04<00:53,  2.27it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=246, num_edges=722,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 10 HETATOM nodes\n",
      "Detected 1452 total nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 10%|▉         | 13/134 [00:05<00:51,  2.33it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Contact file found: ['../../examples/contacts/2brw_contacts.tsv']\n",
      "Calculated 2043 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=726, num_edges=2043,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 10%|█         | 14/134 [00:05<00:47,  2.52it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 1121 total nodes\n",
      "Contact file found: ['../../examples/contacts/2qzp_contacts.tsv']\n",
      "Calculated 1529 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=561, num_edges=1529,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1qim'...\n",
      "Downloaded PDB file for: 1qim\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 532 total nodes\n",
      "1qim\n",
      "['../../examples/pdbs/1qim.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1qim.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 11%|█         | 15/134 [00:08<02:28,  1.24s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1qim\n",
      "Calculated 1486 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=1064, num_edges=1486,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 456 total nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 12%|█▏        | 16/134 [00:08<01:49,  1.08it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Contact file found: ['../../examples/contacts/2r60_contacts.tsv']\n",
      "Calculated 1357 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=456, num_edges=1357,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 148 total nodes\n",
      "Contact file found: ['../../examples/contacts/1qj9_contacts.tsv']\n",
      "Calculated 295 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 13%|█▎        | 17/134 [00:09<01:20,  1.46it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=148, num_edges=295,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '2hzr'...\n",
      "Downloaded PDB file for: 2hzr\n",
      "Detected 24 HETATOM nodes\n",
      "Detected 182 total nodes\n",
      "2hzr\n",
      "['../../examples/pdbs/2hzr.pdb']\n",
      "PDB file detected: ../../examples/pdbs/2hzr.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 13%|█▎        | 18/134 [00:10<01:59,  1.03s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 2hzr\n",
      "Calculated 377 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=182, num_edges=377,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 6 HETATOM nodes\n",
      "Detected 678 total nodes\n",
      "Contact file found: ['../../examples/contacts/1bt2_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 14%|█▍        | 19/134 [00:11<01:30,  1.27it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1034 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=339, num_edges=1034,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 15 HETATOM nodes\n",
      "Detected 573 total nodes\n",
      "Contact file found: ['../../examples/contacts/1qme_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 15%|█▍        | 20/134 [00:11<01:11,  1.59it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1534 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=573, num_edges=1534,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 191 total nodes\n",
      "Contact file found: ['../../examples/contacts/2f3n_contacts.tsv']\n",
      "Calculated 192 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 16%|█▌        | 21/134 [00:11<00:54,  2.09it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=65, num_edges=192,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 144 HETATOM nodes\n",
      "Detected 844 total nodes\n",
      "Contact file found: ['../../examples/contacts/2g6v_contacts.tsv']\n",
      "Calculated 1899 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 16%|█▋        | 22/134 [00:11<00:45,  2.49it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 17%|█▋        | 23/134 [00:11<00:36,  3.01it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=844, num_edges=1899,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 390 total nodes\n",
      "Contact file found: ['../../examples/contacts/1tvl_contacts.tsv']\n",
      "Calculated 1117 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=780, num_edges=1117,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  7%|▋         | 48/668 [28:37<6:09:48, 35.79s/it]\n",
      "  0%|          | 0/757 [04:34<?, ?it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 480 HETATOM nodes\n",
      "Detected 4267 total nodes\n",
      "Contact file found: ['../../examples/contacts/2dg0_contacts.tsv']\n",
      "Calculated 801 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 18%|█▊        | 24/134 [00:12<01:01,  1.79it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=356, num_edges=801,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 568 total nodes\n",
      "Contact file found: ['../../examples/contacts/2iru_contacts.tsv']\n",
      "Calculated 771 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=286, num_edges=771,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 19%|█▊        | 25/134 [00:13<00:49,  2.21it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 19%|█▉        | 26/134 [00:13<00:43,  2.48it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 97 HETATOM nodes\n",
      "Detected 1030 total nodes\n",
      "Contact file found: ['../../examples/contacts/2rjc_contacts.tsv']\n",
      "Calculated 833 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=336, num_edges=833,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 36 HETATOM nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 20%|██        | 27/134 [00:13<00:35,  3.05it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 21%|██        | 28/134 [00:13<00:27,  3.80it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 382 total nodes\n",
      "Contact file found: ['../../examples/contacts/2e3j_contacts.tsv']\n",
      "Calculated 1033 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=382, num_edges=1033,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 146 total nodes\n",
      "Contact file found: ['../../examples/contacts/1vsm_contacts.tsv']\n",
      "Calculated 374 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=292, num_edges=374,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 22%|██▏       | 29/134 [00:13<00:23,  4.42it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 210 total nodes\n",
      "Contact file found: ['../../examples/contacts/2qht_contacts.tsv']\n",
      "Calculated 570 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=210, num_edges=570,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 605 total nodes\n",
      "Contact file found: ['../../examples/contacts/2fp8_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 22%|██▏       | 30/134 [00:14<00:23,  4.49it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 758 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=303, num_edges=758,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 51 HETATOM nodes\n",
      "Detected 594 total nodes\n",
      "Contact file found: ['../../examples/contacts/2v8i_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 23%|██▎       | 31/134 [00:14<00:22,  4.52it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1696 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=594, num_edges=1696,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1edz'...\n",
      "Downloaded PDB file for: 1edz\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 317 total nodes\n",
      "1edz\n",
      "['../../examples/pdbs/1edz.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1edz.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 24%|██▍       | 32/134 [00:17<01:47,  1.06s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1edz\n",
      "Calculated 873 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=634, num_edges=873,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 378 total nodes\n",
      "Contact file found: ['../../examples/contacts/1e4f_contacts.tsv']\n",
      "Calculated 1045 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 25%|██▍       | 33/134 [00:17<01:19,  1.27it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=378, num_edges=1045,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 10 HETATOM nodes\n",
      "Detected 831 total nodes\n",
      "Contact file found: ['../../examples/contacts/3ei7_contacts.tsv']\n",
      "Calculated 2478 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 25%|██▌       | 34/134 [00:17<01:04,  1.55it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 26%|██▌       | 35/134 [00:17<00:49,  1.98it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=831, num_edges=2478,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 98 HETATOM nodes\n",
      "Detected 304 total nodes\n",
      "Contact file found: ['../../examples/contacts/3bgu_contacts.tsv']\n",
      "Calculated 249 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=268, num_edges=249,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1ayx'...\n",
      "Downloaded PDB file for: 1ayx\n",
      "Detected 8 HETATOM nodes\n",
      "Detected 500 total nodes\n",
      "1ayx\n",
      "['../../examples/pdbs/1ayx.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1ayx.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 27%|██▋       | 36/134 [00:20<02:00,  1.23s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1ayx\n",
      "Calculated 1480 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=500, num_edges=1480,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 238 total nodes\n",
      "Contact file found: ['../../examples/contacts/3seb_contacts.tsv']\n",
      "Calculated 573 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 28%|██▊       | 37/134 [00:21<01:27,  1.11it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=238, num_edges=573,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 642 total nodes\n",
      "Contact file found: ['../../examples/contacts/1vll_contacts.tsv']\n",
      "Calculated 1757 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 28%|██▊       | 38/134 [00:21<01:08,  1.41it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=642, num_edges=1757,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 424 total nodes\n",
      "Contact file found: ['../../examples/contacts/1sqg_contacts.tsv']\n",
      "Calculated 1249 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 29%|██▉       | 39/134 [00:21<00:53,  1.78it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=424, num_edges=1249,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 39 HETATOM nodes\n",
      "Detected 287 total nodes\n",
      "Contact file found: ['../../examples/contacts/3c6y_contacts.tsv']\n",
      "Calculated 1588 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 30%|██▉       | 40/134 [00:21<00:43,  2.14it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 31%|███       | 41/134 [00:21<00:35,  2.61it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=574, num_edges=1588,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 502 total nodes\n",
      "Contact file found: ['../../examples/contacts/1r0s_contacts.tsv']\n",
      "Calculated 1376 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=502, num_edges=1376,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 31%|███▏      | 42/134 [00:22<00:27,  3.30it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 145 total nodes\n",
      "Contact file found: ['../../examples/contacts/2qev_contacts.tsv']\n",
      "Calculated 432 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=145, num_edges=432,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 2 HETATOM nodes\n",
      "Detected 640 total nodes\n",
      "Contact file found: ['../../examples/contacts/2b7k_contacts.tsv']\n",
      "Calculated 417 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 32%|███▏      | 43/134 [00:22<00:25,  3.60it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=165, num_edges=417,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 12 HETATOM nodes\n",
      "Detected 669 total nodes\n",
      "Contact file found: ['../../examples/contacts/2vw0_contacts.tsv']\n",
      "Calculated 1538 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 33%|███▎      | 44/134 [00:22<00:23,  3.79it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 34%|███▎      | 45/134 [00:22<00:19,  4.51it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=669, num_edges=1538,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 29 HETATOM nodes\n",
      "Detected 161 total nodes\n",
      "Contact file found: ['../../examples/contacts/3db4_contacts.tsv']\n",
      "Calculated 306 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=161, num_edges=306,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 160 total nodes\n",
      "Contact file found: ['../../examples/contacts/1czt_contacts.tsv']\n",
      "Calculated 367 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 34%|███▍      | 46/134 [00:22<00:16,  5.28it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=160, num_edges=367,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 208 HETATOM nodes\n",
      "Detected 975 total nodes\n",
      "Contact file found: ['../../examples/contacts/2imo_contacts.tsv']\n",
      "Calculated 2288 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 35%|███▌      | 47/134 [00:22<00:18,  4.70it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 36%|███▌      | 48/134 [00:23<00:16,  5.19it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=975, num_edges=2288,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 257 total nodes\n",
      "Contact file found: ['../../examples/contacts/1obs_contacts.tsv']\n",
      "Calculated 733 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=514, num_edges=733,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 37%|███▋      | 49/134 [00:23<00:15,  5.45it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 4 HETATOM nodes\n",
      "Detected 351 total nodes\n",
      "Contact file found: ['../../examples/contacts/1nzu_contacts.tsv']\n",
      "Calculated 898 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=351, num_edges=898,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 37%|███▋      | 50/134 [00:23<00:19,  4.38it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 390 HETATOM nodes\n",
      "Detected 1447 total nodes\n",
      "Contact file found: ['../../examples/contacts/2i7h_contacts.tsv']\n",
      "Calculated 1129 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=438, num_edges=1129,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 38%|███▊      | 51/134 [00:23<00:18,  4.37it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 1 HETATOM nodes\n",
      "Detected 640 total nodes\n",
      "Contact file found: ['../../examples/contacts/1goh_contacts.tsv']\n",
      "Calculated 1673 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=640, num_edges=1673,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 35 HETATOM nodes\n",
      "Detected 173 total nodes\n",
      "Contact file found: ['../../examples/contacts/2zc2_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 39%|███▉      | 52/134 [00:23<00:16,  5.12it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 40%|███▉      | 53/134 [00:24<00:14,  5.60it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 219 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=86, num_edges=219,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 307 total nodes\n",
      "Contact file found: ['../../examples/contacts/1arl_contacts.tsv']\n",
      "Calculated 930 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=307, num_edges=930,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 40%|████      | 54/134 [00:24<00:13,  5.94it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 41%|████      | 55/134 [00:24<00:11,  6.66it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 260 total nodes\n",
      "Contact file found: ['../../examples/contacts/2f5g_contacts.tsv']\n",
      "Calculated 725 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=260, num_edges=725,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 12 HETATOM nodes\n",
      "Detected 124 total nodes\n",
      "Contact file found: ['../../examples/contacts/2cbm_contacts.tsv']\n",
      "Calculated 215 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=124, num_edges=215,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 42%|████▏     | 56/134 [00:24<00:14,  5.40it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 599 total nodes\n",
      "Contact file found: ['../../examples/contacts/1jez_contacts.tsv']\n",
      "Calculated 1788 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=599, num_edges=1788,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 43%|████▎     | 57/134 [00:24<00:12,  6.21it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 43%|████▎     | 58/134 [00:24<00:11,  6.48it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 130 total nodes\n",
      "Contact file found: ['../../examples/contacts/1lyy_contacts.tsv']\n",
      "Calculated 363 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=130, num_edges=363,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 4 HETATOM nodes\n",
      "Detected 279 total nodes\n",
      "Contact file found: ['../../examples/contacts/2sbt_contacts.tsv']\n",
      "Calculated 616 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=279, num_edges=616,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 44%|████▍     | 59/134 [00:25<00:11,  6.48it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 329 total nodes\n",
      "Contact file found: ['../../examples/contacts/1lio_contacts.tsv']\n",
      "Calculated 800 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=329, num_edges=800,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 50 HETATOM nodes\n",
      "Detected 262 total nodes\n",
      "Contact file found: ['../../examples/contacts/2v3j_contacts.tsv']\n",
      "Calculated 561 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 45%|████▍     | 60/134 [00:25<00:10,  6.88it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=262, num_edges=561,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 612 HETATOM nodes\n",
      "Detected 3331 total nodes\n",
      "Contact file found: ['../../examples/contacts/2cn2_contacts.tsv']\n",
      "Calculated 1894 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 46%|████▌     | 61/134 [00:26<00:26,  2.78it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 46%|████▋     | 62/134 [00:26<00:20,  3.50it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=834, num_edges=1894,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 134 total nodes\n",
      "Contact file found: ['../../examples/contacts/1qmt_contacts.tsv']\n",
      "Calculated 298 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=134, num_edges=298,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 4 HETATOM nodes\n",
      "Detected 1522 total nodes\n",
      "Contact file found: ['../../examples/contacts/2pfl_contacts.tsv']\n",
      "Calculated 4769 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 47%|████▋     | 63/134 [00:26<00:23,  2.99it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=1522, num_edges=4769,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 1420 total nodes\n",
      "Contact file found: ['../../examples/contacts/1l7d_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 48%|████▊     | 64/134 [00:26<00:24,  2.88it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1959 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=708, num_edges=1959,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 49%|████▊     | 65/134 [00:27<00:21,  3.16it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 22 HETATOM nodes\n",
      "Detected 694 total nodes\n",
      "Contact file found: ['../../examples/contacts/1oi2_contacts.tsv']\n",
      "Calculated 1976 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=694, num_edges=1976,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 49%|████▉     | 66/134 [00:27<00:19,  3.55it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 516 total nodes\n",
      "Contact file found: ['../../examples/contacts/1f6y_contacts.tsv']\n",
      "Calculated 1573 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=516, num_edges=1573,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 50%|█████     | 67/134 [00:27<00:17,  3.90it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 15 HETATOM nodes\n",
      "Detected 488 total nodes\n",
      "Contact file found: ['../../examples/contacts/2pgd_contacts.tsv']\n",
      "Calculated 1422 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=976, num_edges=1422,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 373 total nodes\n",
      "Contact file found: ['../../examples/contacts/1vf8_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 51%|█████     | 68/134 [00:27<00:15,  4.34it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1089 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=373, num_edges=1089,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 51%|█████▏    | 69/134 [00:28<00:17,  3.77it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 34 HETATOM nodes\n",
      "Detected 1315 total nodes\n",
      "Contact file found: ['../../examples/contacts/1jx1_contacts.tsv']\n",
      "Calculated 580 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=218, num_edges=580,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 52%|█████▏    | 70/134 [00:28<00:14,  4.44it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 74 HETATOM nodes\n",
      "Detected 308 total nodes\n",
      "Contact file found: ['../../examples/contacts/2jh1_contacts.tsv']\n",
      "Calculated 629 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=308, num_edges=629,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 15 HETATOM nodes\n",
      "Detected 277 total nodes\n",
      "Contact file found: ['../../examples/contacts/1u4r_contacts.tsv']\n",
      "Calculated 266 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 53%|█████▎    | 71/134 [00:28<00:12,  5.00it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=140, num_edges=266,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 1 HETATOM nodes\n",
      "Detected 597 total nodes\n",
      "Contact file found: ['../../examples/contacts/2hv6_contacts.tsv']\n",
      "Calculated 947 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 54%|█████▎    | 72/134 [00:28<00:12,  4.92it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 54%|█████▍    | 73/134 [00:28<00:10,  5.70it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=295, num_edges=947,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 101 total nodes\n",
      "Contact file found: ['../../examples/contacts/3wrp_contacts.tsv']\n",
      "Calculated 257 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=202, num_edges=257,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 284 total nodes\n",
      "Contact file found: ['../../examples/contacts/2cwc_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 55%|█████▌    | 74/134 [00:28<00:10,  5.89it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 936 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=284, num_edges=936,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 4 HETATOM nodes\n",
      "Detected 602 total nodes\n",
      "Contact file found: ['../../examples/contacts/1jly_contacts.tsv']\n",
      "Calculated 1531 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 56%|█████▌    | 75/134 [00:29<00:10,  5.37it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 57%|█████▋    | 76/134 [00:29<00:10,  5.41it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=602, num_edges=1531,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 432 total nodes\n",
      "Contact file found: ['../../examples/contacts/1dcl_contacts.tsv']\n",
      "Calculated 953 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=432, num_edges=953,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 57%|█████▋    | 77/134 [00:29<00:11,  4.96it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 14 HETATOM nodes\n",
      "Detected 654 total nodes\n",
      "Contact file found: ['../../examples/contacts/2znv_contacts.tsv']\n",
      "Calculated 170 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=77, num_edges=170,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 58%|█████▊    | 78/134 [00:29<00:11,  4.92it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 4 HETATOM nodes\n",
      "Detected 528 total nodes\n",
      "Contact file found: ['../../examples/contacts/1oen_contacts.tsv']\n",
      "Calculated 1377 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=528, num_edges=1377,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 1 HETATOM nodes\n",
      "Detected 353 total nodes\n",
      "Contact file found: ['../../examples/contacts/1plu_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 59%|█████▉    | 79/134 [00:29<00:10,  5.33it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 963 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=353, num_edges=963,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 3 HETATOM nodes\n",
      "Detected 589 total nodes\n",
      "Contact file found: ['../../examples/contacts/1h3i_contacts.tsv']\n",
      "Calculated 666 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 60%|█████▉    | 80/134 [00:30<00:09,  5.41it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 60%|██████    | 81/134 [00:30<00:08,  6.18it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=295, num_edges=666,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 8 HETATOM nodes\n",
      "Detected 96 total nodes\n",
      "Contact file found: ['../../examples/contacts/2hts_contacts.tsv']\n",
      "Calculated 207 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=96, num_edges=207,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 52 HETATOM nodes\n",
      "Detected 283 total nodes\n",
      "Contact file found: ['../../examples/contacts/1h8u_contacts.tsv']\n",
      "Calculated 279 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 61%|██████    | 82/134 [00:30<00:08,  6.47it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 62%|██████▏   | 83/134 [00:30<00:07,  6.49it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=131, num_edges=279,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 19 HETATOM nodes\n",
      "Detected 342 total nodes\n",
      "Contact file found: ['../../examples/contacts/1ds0_contacts.tsv']\n",
      "Calculated 870 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=342, num_edges=870,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 1 HETATOM nodes\n",
      "Detected 83 total nodes"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 63%|██████▎   | 84/134 [00:30<00:07,  7.12it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Contact file found: ['../../examples/contacts/1r6j_contacts.tsv']\n",
      "Calculated 184 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=83, num_edges=184,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 77 HETATOM nodes\n",
      "Detected 351 total nodes\n",
      "Contact file found: ['../../examples/contacts/2qvl_contacts.tsv']\n",
      "Calculated 699 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 63%|██████▎   | 85/134 [00:30<00:07,  6.95it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 64%|██████▍   | 86/134 [00:30<00:07,  6.33it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=351, num_edges=699,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 10 HETATOM nodes\n",
      "Detected 546 total nodes\n",
      "Contact file found: ['../../examples/contacts/1mdf_contacts.tsv']\n",
      "Calculated 1487 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=546, num_edges=1487,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 65%|██████▍   | 87/134 [00:31<00:07,  5.95it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 4 HETATOM nodes\n",
      "Detected 313 total nodes\n",
      "Contact file found: ['../../examples/contacts/2h1v_contacts.tsv']\n",
      "Calculated 964 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=313, num_edges=964,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 185 total nodes\n",
      "Contact file found: ['../../examples/contacts/153l_contacts.tsv']\n",
      "Calculated 612 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 66%|██████▌   | 88/134 [00:31<00:07,  6.43it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=185, num_edges=612,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1na8'...\n",
      "Downloaded PDB file for: 1na8\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 296 total nodes\n",
      "1na8\n",
      "['../../examples/pdbs/1na8.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1na8.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 66%|██████▋   | 89/134 [00:33<00:35,  1.26it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 67%|██████▋   | 90/134 [00:33<00:26,  1.69it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1na8\n",
      "Calculated 262 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=145, num_edges=262,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 141 total nodes\n",
      "Contact file found: ['../../examples/contacts/2d59_contacts.tsv']\n",
      "Calculated 409 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=141, num_edges=409,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 68%|██████▊   | 91/134 [00:33<00:20,  2.10it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 7 HETATOM nodes\n",
      "Detected 571 total nodes\n",
      "Contact file found: ['../../examples/contacts/1rif_contacts.tsv']\n",
      "Calculated 801 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=285, num_edges=801,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 5 HETATOM nodes\n",
      "Detected 217 total nodes\n",
      "Contact file found: ['../../examples/contacts/2zlb_contacts.tsv']\n",
      "Calculated 601 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 69%|██████▊   | 92/134 [00:33<00:15,  2.70it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=217, num_edges=601,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 69%|██████▉   | 93/134 [00:34<00:15,  2.64it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 10 HETATOM nodes\n",
      "Detected 981 total nodes\n",
      "Contact file found: ['../../examples/contacts/2cfo_contacts.tsv']\n",
      "Calculated 1455 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=487, num_edges=1455,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '2eh1'...\n",
      "Downloaded PDB file for: 2eh1\n",
      "Detected 50 HETATOM nodes\n",
      "Detected 224 total nodes\n",
      "2eh1\n",
      "['../../examples/pdbs/2eh1.pdb']\n",
      "PDB file detected: ../../examples/pdbs/2eh1.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 70%|███████   | 94/134 [00:36<00:33,  1.20it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 2eh1\n",
      "Calculated 211 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=104, num_edges=211,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 6 HETATOM nodes\n",
      "Detected 249 total nodes\n",
      "Contact file found: ['../../examples/contacts/2j0a_contacts.tsv']\n",
      "Calculated 653 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 71%|███████   | 95/134 [00:36<00:24,  1.60it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 72%|███████▏  | 96/134 [00:36<00:18,  2.11it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=249, num_edges=653,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 4 HETATOM nodes\n",
      "Detected 189 total nodes\n",
      "Contact file found: ['../../examples/contacts/1oee_contacts.tsv']\n",
      "Calculated 479 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=189, num_edges=479,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 72%|███████▏  | 97/134 [00:36<00:15,  2.45it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 775 total nodes\n",
      "Contact file found: ['../../examples/contacts/1tf5_contacts.tsv']\n",
      "Calculated 2259 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=775, num_edges=2259,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 73%|███████▎  | 98/134 [00:36<00:12,  2.92it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 10 HETATOM nodes\n",
      "Detected 314 total nodes\n",
      "Contact file found: ['../../examples/contacts/2ii2_contacts.tsv']\n",
      "Calculated 995 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=314, num_edges=995,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 10 HETATOM nodes\n",
      "Detected 535 total nodes\n",
      "Contact file found: ['../../examples/contacts/2v28_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 74%|███████▍  | 99/134 [00:37<00:10,  3.30it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1561 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=535, num_edges=1561,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 138 HETATOM nodes\n",
      "Detected 804 total nodes\n",
      "Contact file found: ['../../examples/contacts/1ujm_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 75%|███████▍  | 100/134 [00:37<00:09,  3.64it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 960 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=407, num_edges=960,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 75%|███████▌  | 101/134 [00:37<00:09,  3.52it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 21 HETATOM nodes\n",
      "Detected 1345 total nodes\n",
      "Contact file found: ['../../examples/contacts/2p0m_contacts.tsv']\n",
      "Calculated 1850 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=663, num_edges=1850,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 76%|███████▌  | 102/134 [00:37<00:08,  3.95it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 604 total nodes\n",
      "Contact file found: ['../../examples/contacts/1uk2_contacts.tsv']\n",
      "Calculated 1553 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=604, num_edges=1553,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 560 total nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 77%|███████▋  | 103/134 [00:38<00:07,  4.33it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 78%|███████▊  | 104/134 [00:38<00:05,  5.10it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Contact file found: ['../../examples/contacts/1dqz_contacts.tsv']\n",
      "Calculated 860 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=280, num_edges=860,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 93 HETATOM nodes\n",
      "Detected 237 total nodes\n",
      "Contact file found: ['../../examples/contacts/2a6c_contacts.tsv']\n",
      "Calculated 184 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=216, num_edges=184,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 78%|███████▊  | 105/134 [00:38<00:06,  4.36it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 1047 total nodes\n",
      "Contact file found: ['../../examples/contacts/2oam_contacts.tsv']\n",
      "Calculated 3094 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=1047, num_edges=3094,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 79%|███████▉  | 106/134 [00:38<00:05,  4.89it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 134 HETATOM nodes\n",
      "Detected 436 total nodes\n",
      "Contact file found: ['../../examples/contacts/2a0k_contacts.tsv']\n",
      "Calculated 888 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=436, num_edges=888,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 394 total nodes\n",
      "Contact file found: ['../../examples/contacts/2e1y_contacts.tsv']\n",
      "Calculated 1082 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 80%|███████▉  | 107/134 [00:38<00:05,  5.15it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=788, num_edges=1082,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 1160 total nodes\n",
      "Contact file found: ['../../examples/contacts/1l0w_contacts.tsv']\n",
      "Calculated 3002 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 81%|████████  | 108/134 [00:39<00:05,  4.34it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 81%|████████▏ | 109/134 [00:39<00:05,  4.90it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=1160, num_edges=3002,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 2 HETATOM nodes\n",
      "Detected 238 total nodes\n",
      "Contact file found: ['../../examples/contacts/1g0z_contacts.tsv']\n",
      "Calculated 646 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=238, num_edges=646,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 210 total nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 82%|████████▏ | 110/134 [00:39<00:04,  5.49it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Contact file found: ['../../examples/contacts/2r57_contacts.tsv']\n",
      "Calculated 541 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=210, num_edges=541,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 484 total nodes\n",
      "Contact file found: ['../../examples/contacts/2vl3_contacts.tsv']\n",
      "Calculated 789 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 83%|████████▎ | 111/134 [00:39<00:04,  5.49it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 84%|████████▎ | 112/134 [00:39<00:03,  5.93it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=322, num_edges=789,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 214 total nodes\n",
      "Contact file found: ['../../examples/contacts/1eym_contacts.tsv']\n",
      "Calculated 255 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=107, num_edges=255,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 84%|████████▍ | 113/134 [00:39<00:03,  5.92it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 370 total nodes\n",
      "Contact file found: ['../../examples/contacts/1zkb_contacts.tsv']\n",
      "Calculated 1042 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=370, num_edges=1042,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1e9n'...\n",
      "Downloaded PDB file for: 1e9n\n",
      "Detected 4 HETATOM nodes\n",
      "Detected 552 total nodes\n",
      "1e9n\n",
      "['../../examples/pdbs/1e9n.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1e9n.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 85%|████████▌ | 114/134 [00:43<00:21,  1.09s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1e9n\n",
      "Calculated 790 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=276, num_edges=790,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 360 total nodes\n",
      "Contact file found: ['../../examples/contacts/1wny_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 86%|████████▌ | 115/134 [00:43<00:15,  1.23it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 462 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=180, num_edges=462,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 36 HETATOM nodes\n",
      "Detected 382 total nodes\n",
      "Contact file found: ['../../examples/contacts/2e3j_contacts.tsv']\n",
      "Calculated 1033 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 87%|████████▋ | 116/134 [00:43<00:11,  1.62it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 87%|████████▋ | 117/134 [00:43<00:07,  2.13it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=382, num_edges=1033,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 10 HETATOM nodes\n",
      "Detected 211 total nodes\n",
      "Contact file found: ['../../examples/contacts/1kuf_contacts.tsv']\n",
      "Calculated 600 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=211, num_edges=600,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 373 total nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 88%|████████▊ | 118/134 [00:43<00:06,  2.58it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Contact file found: ['../../examples/contacts/2hy7_contacts.tsv']\n",
      "Calculated 1097 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=373, num_edges=1097,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 272 total nodes\n",
      "Contact file found: ['../../examples/contacts/2pgy_contacts.tsv']\n",
      "Calculated 709 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 89%|████████▉ | 119/134 [00:43<00:04,  3.16it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=544, num_edges=709,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 160 HETATOM nodes\n",
      "Detected 1384 total nodes\n",
      "Contact file found: ['../../examples/contacts/2hzb_contacts.tsv']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 90%|████████▉ | 120/134 [00:44<00:04,  3.12it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculated 1709 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=692, num_edges=1709,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 8 HETATOM nodes\n",
      "Detected 218 total nodes\n",
      "Contact file found: ['../../examples/contacts/1kx9_contacts.tsv']\n",
      "Calculated 322 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 90%|█████████ | 121/134 [00:44<00:03,  3.87it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=112, num_edges=322,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1w90'...\n",
      "Downloaded PDB file for: 1w90\n",
      "Detected 5 HETATOM nodes\n",
      "Detected 298 total nodes\n",
      "1w90\n",
      "['../../examples/pdbs/1w90.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1w90.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 91%|█████████ | 122/134 [00:46<00:10,  1.20it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1w90\n",
      "Calculated 334 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=152, num_edges=334,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '1v8q'...\n",
      "Downloaded PDB file for: 1v8q\n",
      "Detected 8 HETATOM nodes\n",
      "Detected 272 total nodes\n",
      "1v8q\n",
      "['../../examples/pdbs/1v8q.pdb']\n",
      "PDB file detected: ../../examples/pdbs/1v8q.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 92%|█████████▏| 123/134 [00:48<00:13,  1.23s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 1v8q\n",
      "Calculated 151 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=66, num_edges=151,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 10 HETATOM nodes\n",
      "Detected 464 total nodes\n",
      "Contact file found: ['../../examples/contacts/2vfw_contacts.tsv']\n",
      "Calculated 1342 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 93%|█████████▎| 124/134 [00:48<00:09,  1.09it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 93%|█████████▎| 125/134 [00:49<00:06,  1.45it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=464, num_edges=1342,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 5 HETATOM nodes\n",
      "Detected 434 total nodes\n",
      "Contact file found: ['../../examples/contacts/1e0d_contacts.tsv']\n",
      "Calculated 1172 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=434, num_edges=1172,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 94%|█████████▍| 126/134 [00:49<00:04,  1.88it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 21 HETATOM nodes\n",
      "Detected 335 total nodes\n",
      "Contact file found: ['../../examples/contacts/2o6f_contacts.tsv']\n",
      "Calculated 771 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=335, num_edges=771,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 95%|█████████▍| 127/134 [00:49<00:03,  2.24it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 869 total nodes\n",
      "Contact file found: ['../../examples/contacts/1aja_contacts.tsv']\n",
      "Calculated 2475 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=869, num_edges=2475,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 307 total nodes\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 96%|█████████▌| 128/134 [00:49<00:02,  2.83it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Contact file found: ['../../examples/contacts/1m14_contacts.tsv']\n",
      "Calculated 750 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=307, num_edges=750,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 1986 total nodes\n",
      "Contact file found: ['../../examples/contacts/1wac_contacts.tsv']\n",
      "Calculated 1954 intramolecular interaction-based edges\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 96%|█████████▋| 129/134 [00:50<00:02,  2.35it/s]\u001b[A\u001b[A\u001b[A\n",
      "\n",
      "\n",
      " 97%|█████████▋| 130/134 [00:50<00:01,  2.94it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DGLGraph(num_nodes=662, num_edges=1954,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 272 total nodes\n",
      "Contact file found: ['../../examples/contacts/1w28_contacts.tsv']\n",
      "Calculated 674 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=272, num_edges=674,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 98%|█████████▊| 131/134 [00:50<00:00,  3.29it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 145 HETATOM nodes\n",
      "Detected 810 total nodes\n",
      "Contact file found: ['../../examples/contacts/1zvw_contacts.tsv']\n",
      "Calculated 937 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=382, num_edges=937,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 99%|█████████▊| 132/134 [00:50<00:00,  3.75it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 0 HETATOM nodes\n",
      "Detected 274 total nodes\n",
      "Contact file found: ['../../examples/contacts/1gqz_contacts.tsv']\n",
      "Calculated 662 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=274, num_edges=662,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n",
      "Downloading PDB structure '3b9n'...\n",
      "Downloaded PDB file for: 3b9n\n",
      "Detected 0 HETATOM nodes\n",
      "Detected 867 total nodes\n",
      "3b9n\n",
      "['../../examples/pdbs/3b9n.pdb']\n",
      "PDB file detected: ../../examples/pdbs/3b9n.pdb\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      " 99%|█████████▉| 133/134 [00:55<00:01,  1.57s/it]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computed Contacts for: 3b9n\n",
      "Calculated 2772 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=867, num_edges=2772,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "100%|██████████| 134/134 [00:55<00:00,  2.42it/s]\u001b[A\u001b[A\u001b[A"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected 4 HETATOM nodes\n",
      "Detected 279 total nodes\n",
      "Contact file found: ['../../examples/contacts/2sbt_contacts.tsv']\n",
      "Calculated 616 intramolecular interaction-based edges\n",
      "DGLGraph(num_nodes=279, num_edges=616,\n",
      "         ndata_schemes={'id': Scheme(shape=(), dtype=dtype('O')), 'residue_name': Scheme(shape=(), dtype=dtype('O')), 'h': Scheme(shape=(7,), dtype=torch.float32), 'coords': Scheme(shape=(3,), dtype=torch.float32), 'ss': Scheme(shape=(9,), dtype=torch.float32), 'asa': Scheme(shape=(1,), dtype=torch.float32), 'rsa': Scheme(shape=(1,), dtype=torch.float32)}\n",
      "         edata_schemes={'rel_type': Scheme(shape=(17,), dtype=torch.float64), 'norm': Scheme(shape=(), dtype=torch.float32)})\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# Split datasets\n",
    "x_train, x_test, y_train, y_test = train_test_split(df, labels, test_size=0.15)\n",
    "\n",
    "# Initialise Graph Constructor\n",
    "pg = ProteinGraph(granularity='CA', insertions=False, keep_hets=True,\n",
    "                  node_featuriser='meiler', get_contacts_path='/Users/arianjamasb/github/getcontacts',\n",
    "                  pdb_dir='../../examples/pdbs/',\n",
    "                  contacts_dir='../../examples/contacts/',\n",
    "                  exclude_waters=True, covalent_bonds=False, include_ss=True)\n",
    "\n",
    "# Build Graphs\n",
    "train_graphs = [pg.dgl_graph_from_pdb_code(pdb_code=x_train['Free PDB'].iloc[i],\n",
    "                                         chain_selection=list(x_train['Free Chains'].iloc[i])) for i in tqdm(range(len(x_train)))]\n",
    "\n",
    "test_graphs = [pg.dgl_graph_from_pdb_code(pdb_code=x_test['Free PDB'].iloc[i],\n",
    "                                         chain_selection=list(x_test['Free Chains'].iloc[i])) for i in tqdm(range(len(x_test)))]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "def collate(samples):\n",
    "    # The input `samples` is a list of pairs\n",
    "    #  (graph, label).\n",
    "    graphs, labels = map(list, zip(*samples))\n",
    "    batched_graph = dgl.batch(graphs, node_attrs='h')\n",
    "    batched_graph.set_n_initializer(dgl.init.zero_initializer)\n",
    "    batched_graph.set_e_initializer(dgl.init.zero_initializer)\n",
    "    return batched_graph, torch.stack(labels)\n",
    "\n",
    "train_data = list(zip(train_graphs, y_train))\n",
    "test_data = list(zip(test_graphs, y_test))\n",
    "\n",
    "#Create dataloaders\n",
    "train_loader = DataLoader(train_data, batch_size=32, shuffle=True,\n",
    "                         collate_fn=collate)\n",
    "\n",
    "test_loader = DataLoader(test_data, batch_size=32, shuffle=True,\n",
    "                         collate_fn=collate)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model\n",
    "Here, we define a simple GCN for graph classification. We then train it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_feats = train_graphs[1].ndata['h'].shape[1]\n",
    "\n",
    "# Instantiate model\n",
    "gcn_net = GCNPredictor(in_feats=n_feats,\n",
    "                       hidden_feats=[32, 32],\n",
    "                       batchnorm=[True, True],\n",
    "                       dropout=[0, 0],\n",
    "                       classifier_hidden_feats=32,\n",
    "                       n_tasks=7\n",
    "                       )\n",
    "gcn_net.to(device)\n",
    "loss_fn = CrossEntropyLoss()\n",
    "optimizer = torch.optim.Adam(gcn_net.parameters(), lr=0.005)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0, LOSS: 1.953, F1: 0.242, Precision: 0.242, Recall: 0.242\n",
      "epoch: 5, LOSS: 1.790, F1: 0.322, Precision: 0.322, Recall: 0.322\n",
      "epoch: 10, LOSS: 1.791, F1: 0.332, Precision: 0.332, Recall: 0.332\n",
      "epoch: 15, LOSS: 1.781, F1: 0.334, Precision: 0.334, Recall: 0.334\n",
      "epoch: 20, LOSS: 1.771, F1: 0.329, Precision: 0.329, Recall: 0.329\n",
      "epoch: 25, LOSS: 1.763, F1: 0.321, Precision: 0.321, Recall: 0.321\n",
      "epoch: 30, LOSS: 1.745, F1: 0.333, Precision: 0.333, Recall: 0.333\n",
      "epoch: 35, LOSS: 1.803, F1: 0.324, Precision: 0.324, Recall: 0.324\n",
      "epoch: 40, LOSS: 1.736, F1: 0.338, Precision: 0.338, Recall: 0.338\n",
      "epoch: 45, LOSS: 1.766, F1: 0.322, Precision: 0.322, Recall: 0.322\n",
      "epoch: 50, LOSS: 1.741, F1: 0.337, Precision: 0.337, Recall: 0.337\n",
      "epoch: 55, LOSS: 1.723, F1: 0.337, Precision: 0.337, Recall: 0.337\n",
      "epoch: 60, LOSS: 1.678, F1: 0.343, Precision: 0.343, Recall: 0.343\n",
      "epoch: 65, LOSS: 1.664, F1: 0.338, Precision: 0.338, Recall: 0.338\n",
      "epoch: 70, LOSS: 1.677, F1: 0.351, Precision: 0.351, Recall: 0.351\n",
      "epoch: 75, LOSS: 1.618, F1: 0.350, Precision: 0.350, Recall: 0.350\n",
      "epoch: 80, LOSS: 1.595, F1: 0.373, Precision: 0.373, Recall: 0.373\n",
      "epoch: 85, LOSS: 1.685, F1: 0.329, Precision: 0.329, Recall: 0.329\n",
      "epoch: 90, LOSS: 1.606, F1: 0.366, Precision: 0.366, Recall: 0.366\n",
      "epoch: 95, LOSS: 1.627, F1: 0.357, Precision: 0.357, Recall: 0.357\n",
      "epoch: 100, LOSS: 1.557, F1: 0.386, Precision: 0.386, Recall: 0.386\n",
      "epoch: 105, LOSS: 1.494, F1: 0.407, Precision: 0.407, Recall: 0.407\n",
      "epoch: 110, LOSS: 1.595, F1: 0.371, Precision: 0.371, Recall: 0.371\n",
      "epoch: 115, LOSS: 1.501, F1: 0.399, Precision: 0.399, Recall: 0.399\n",
      "epoch: 120, LOSS: 1.468, F1: 0.412, Precision: 0.412, Recall: 0.412\n",
      "epoch: 125, LOSS: 1.405, F1: 0.439, Precision: 0.439, Recall: 0.439\n",
      "epoch: 130, LOSS: 1.403, F1: 0.465, Precision: 0.465, Recall: 0.465\n",
      "epoch: 135, LOSS: 1.324, F1: 0.489, Precision: 0.489, Recall: 0.489\n",
      "epoch: 140, LOSS: 1.274, F1: 0.519, Precision: 0.519, Recall: 0.519\n",
      "epoch: 145, LOSS: 1.256, F1: 0.507, Precision: 0.507, Recall: 0.507\n",
      "epoch: 150, LOSS: 1.293, F1: 0.498, Precision: 0.498, Recall: 0.498\n",
      "epoch: 155, LOSS: 1.141, F1: 0.567, Precision: 0.567, Recall: 0.567\n",
      "epoch: 160, LOSS: 1.123, F1: 0.569, Precision: 0.569, Recall: 0.569\n",
      "epoch: 165, LOSS: 1.083, F1: 0.585, Precision: 0.585, Recall: 0.585\n",
      "epoch: 170, LOSS: 1.165, F1: 0.542, Precision: 0.542, Recall: 0.542\n",
      "epoch: 175, LOSS: 1.062, F1: 0.583, Precision: 0.583, Recall: 0.583\n",
      "epoch: 180, LOSS: 1.127, F1: 0.560, Precision: 0.560, Recall: 0.560\n",
      "epoch: 185, LOSS: 1.015, F1: 0.602, Precision: 0.602, Recall: 0.602\n",
      "epoch: 190, LOSS: 0.994, F1: 0.601, Precision: 0.601, Recall: 0.601\n",
      "epoch: 195, LOSS: 0.973, F1: 0.625, Precision: 0.625, Recall: 0.625\n"
     ]
    }
   ],
   "source": [
    "epochs = 200\n",
    "\n",
    "# Training loop\n",
    "gcn_net.train()\n",
    "epoch_losses = []\n",
    "\n",
    "epoch_f1_scores = [] \n",
    "epoch_precision_scores = []\n",
    "epoch_recall_scores = []\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    epoch_loss = 0\n",
    "\n",
    "    preds = []\n",
    "    labs = []\n",
    "    # Train on batch\n",
    "    for i, (bg, labels) in enumerate(train_loader):\n",
    "        labels = labels.to(device)\n",
    "        graph_feats = bg.ndata.pop('h').to(device)\n",
    "        graph_feats, labels = graph_feats.to(device), labels.to(device)\n",
    "        y_pred = gcn_net(bg, graph_feats)\n",
    "        \n",
    "        preds.append(y_pred.detach().numpy())\n",
    "        labs.append(labels.detach().numpy())\n",
    "\n",
    "        labels = np.argmax(labels, axis=1)\n",
    "        \n",
    "        loss = loss_fn(y_pred, labels)\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        epoch_loss += loss.detach().item()\n",
    "        \n",
    "    epoch_loss /= (i + 1)\n",
    "    \n",
    "    preds = np.vstack(preds)\n",
    "    labs = np.vstack(labs)\n",
    "    \n",
    "    # There's some sort of issue going on here with the scoring. All three values are the same\n",
    "    f1 = f1_score(np.argmax(labs, axis=1), np.argmax(preds, axis=1), average='micro')\n",
    "    precision = precision_score(np.argmax(labs, axis=1), np.argmax(preds, axis=1), average='micro')\n",
    "    recall = recall_score(np.argmax(labs, axis=1), np.argmax(preds, axis=1), average='micro')\n",
    "    \n",
    "    if epoch % 5 == 0:\n",
    "        print(f\"epoch: {epoch}, LOSS: {epoch_loss:.3f}, F1: {f1:.3f}, Precision: {precision:.3f}, Recall: {recall:.3f}\")\n",
    "        \n",
    "    epoch_losses.append(epoch_loss)\n",
    "    epoch_f1_scores.append(f1)\n",
    "    epoch_precision_scores.append(precision)\n",
    "    epoch_recall_scores.append(recall)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8c2b878208>"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epoch_losses, label=\"Loss\")\n",
    "plt.plot(epoch_f1_scores, label='F1')\n",
    "plt.plot(epoch_precision_scores, label=\"Precision\")\n",
    "plt.plot(epoch_recall_scores, label=\"Recall\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TEST F1: 0.201, Precision: 0.201, Recall: 0.201\n"
     ]
    }
   ],
   "source": [
    "# Evaluate\n",
    "gcn_net.eval()\n",
    "test_loss = 0\n",
    "\n",
    "preds = []\n",
    "labs = []\n",
    "for i, (bg, labels) in enumerate(test_loader):\n",
    "    labels = labels.to(device)\n",
    "    graph_feats = bg.ndata.pop('h').to(device)\n",
    "    graph_feats, labels = graph_feats.to(device), labels.to(device)\n",
    "    y_pred = gcn_net(bg, graph_feats)\n",
    "\n",
    "    preds.append(y_pred.detach().numpy())\n",
    "    labs.append(labels.detach().numpy())\n",
    "\n",
    "labs = np.vstack(labs)\n",
    "preds = np.vstack(preds)\n",
    "\n",
    "f1 = f1_score(np.argmax(labs, axis=1), np.argmax(preds, axis=1), average='micro')\n",
    "precision = precision_score(np.argmax(labs, axis=1), np.argmax(preds, axis=1), average='micro')\n",
    "recall = recall_score(np.argmax(labs, axis=1), np.argmax(preds, axis=1), average='micro')\n",
    "\n",
    "print(f\"TEST F1: {f1:.3f}, Precision: {precision:.3f}, Recall: {recall:.3f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python Graphein",
   "language": "python",
   "name": "graphein"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
